<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta http-equiv="Cache-Control" content="no-siteapp">
  <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
  <meta name="renderer" content="webkit">

  
  <title>喜欢 Android 14 的 14 个理由 | 龙之叶的博客</title>

  <link rel="shortcut icon" href="/images/favicon.png">
  <link rel="alternate" href="/atom.xml" title="龙之叶的博客" type="application/atom+xml">
  <meta name="description" content="喜欢 Android 14 的 14 个理由">
<meta property="og:type" content="article">
<meta property="og:title" content="喜欢 Android 14 的 14 个理由">
<meta property="og:url" content="http://longzhiye.top/2023/11/11/2023-11-11/index.html">
<meta property="og:site_name" content="龙之叶的博客">
<meta property="og:description" content="喜欢 Android 14 的 14 个理由">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111001.jpg">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111002.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111003.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111004.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111005.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111021.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111006.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111007.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111008.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111009.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111010.gif">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111011.gif">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111012.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111013.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111014.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111015.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111016.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111017.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111018.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111019.png">
<meta property="og:image" content="http://longzhiye.top/images/20231111/20231111020.gif">
<meta property="article:published_time" content="2023-11-10T16:00:00.000Z">
<meta property="article:modified_time" content="2024-08-29T02:40:34.912Z">
<meta property="article:author" content="龙之叶">
<meta property="article:tag" content="Android">
<meta property="article:tag" content="Framework">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="http://longzhiye.top/images/20231111/20231111001.jpg">

  <meta name="keywords" content=",Android,Framework">
  <meta name="format-detection" content="telephone=no,email=no">
  <meta name="theme-color" content="#9C27B0">

  <meta name="mobile-web-app-capable" content="yes">
  <meta name="application-name" content="龙之叶的博客">
  <meta name="msapplication-starturl" content="http://longzhiye.top/2023/11/11/2023-11-11/">
  <meta name="msapplication-navbutton-color" content="#9C27B0">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-title" content="龙之叶的博客">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <link rel="apple-touch-icon" href="/images/favicon.png">

  
    <link rel="canonical" href="http://longzhiye.top/2023/11/11/2023-11-11/">
  

  
  

  
  
  

  
<link rel="stylesheet" href="/css/mdui.css">
<link rel="stylesheet" href="/css/style.css">

  
<link rel="stylesheet" href="/custom.css">

<meta name="generator" content="Hexo 5.4.2"></head>

<body class="mdui-appbar-with-toolbar mdui-theme-primary-indigo mdui-theme-accent-pink">
  <script>var a=localStorage.getItem("mdui-theme-layout-dark");if(a){document.getElementsByTagName("body")[0].className+=" mdui-theme-layout-dark"};</script>
  <script>if(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches){document.getElementsByTagName("body")[0].className+=" mdui-theme-layout-dark"};</script>
  <script>var a=localStorage.getItem("mdui-drawer-close");if(!a){document.getElementsByTagName("body")[0].className+=" mdui-drawer-body-left"};</script>
  <header id="header" class="mdui-appbar mdui-appbar-fixed mdui-appbar-scroll-hide mdui-appbar-inset">
  <div class="mdui-toolbar mdui-color-theme">
    <a href="javascript:;" class="mdui-btn mdui-btn-icon" mdui-drawer="{target: '#sidebar', swipe: true}"><i class="mdui-icon material-icons">menu</i></a>
    <a href="/" class="mdui-typo-headline">龙之叶的博客</a>
    <div class="mdui-toolbar-spacer"></div>
    <a href="javascript:;" class="mdui-btn mdui-btn-icon" mdui-dialog="{target: '#search'}" mdui-tooltip="{content: '搜索'}"><i class="mdui-icon material-icons">search</i></a>
	<!--
    <a href="/atom.xml" class="mdui-btn mdui-btn-icon" mdui-tooltip="{content: 'RSS'}"><i class="mdui-icon material-icons">rss_feed</i></a>
	-->
  </div>
</header>
<div class="mdui-dialog" id="search">
  
    <div class="search-form">
      <input type="search" class="search-form-input" placeholder="请输入关键字">
    </div>
    <div class="search-result" data-resource="/search.xml"></div>
  
</div>

  <aside id="sidebar" class="mdui-drawer mdui-drawer-full-height">
  <script>var a=localStorage.getItem("mdui-drawer-close");if(a){document.getElementById("sidebar").className+=" mdui-drawer-close"};</script>
  <div class="mdui-grid-tile">
    <img src="/images/banner.png" style="height: 160px;">
    <img src="/images/avatar.png" class="avatar-animation" style="position: absolute; top: 10%; left: 24px; width: 64px; height: 64px; border: 2px solid #fff; border-radius: 50%;background-color:#fff;">
    <div class="mdui-grid-tile-actions">
      <div class="mdui-grid-tile-text">
        <div class="mdui-grid-tile-title">龙之叶</div>
        <div class="mdui-grid-tile-subtitle"><i class="mdui-icon material-icons">art_track</i>生命不息，折腾不止</div>
      </div>
      
        <div class="mdui-grid-tile-buttons">
          <a href="mailto:longzhiye163@163.com" class="mdui-btn mdui-btn-icon" mdui-tooltip="{content: 'longzhiye163@163.com'}"><i class="mdui-icon material-icons">email</i></a>
        </div>
      
    </div>
  </div>

  <div class="mdui-list" mdui-collapse="{accordion: true}">
    <a href="/" class="mdui-list-item mdui-ripple">
      <i class="mdui-list-item-icon mdui-icon material-icons mdui-text-color-blue">home</i>
      <div class="mdui-list-item-content">主页</div>
    </a>
    <div class="mdui-collapse-item">
      <script>var a=localStorage.getItem("mdui-collapse-item-0");if(a){document.getElementsByClassName("mdui-collapse-item")[0].className+=" mdui-collapse-item-open"};</script>
      <div class="mdui-collapse-item-header mdui-list-item mdui-ripple">
        <i class="mdui-list-item-icon mdui-icon material-icons mdui-text-color-deep-orange">archive</i>
        <div class="mdui-list-item-content">归档</div>
        <i class="mdui-collapse-item-arrow mdui-icon material-icons">keyboard_arrow_down</i>
      </div>
      <div class="mdui-collapse-item-body mdui-list mdui-list-dense">
        
        <a class="mdui-ripple sidebar_archives-link" href="/archives/2025/07/">七月 2025<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2025/06/">六月 2025<span class="mdui-ripple sidebar_archives-count">2</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2025/03/">三月 2025<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2025/02/">二月 2025<span class="mdui-ripple sidebar_archives-count">2</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2025/01/">一月 2025<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2024/10/">十月 2024<span class="mdui-ripple sidebar_archives-count">7</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2024/09/">九月 2024<span class="mdui-ripple sidebar_archives-count">4</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2024/08/">八月 2024<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2024/03/">三月 2024<span class="mdui-ripple sidebar_archives-count">5</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2024/02/">二月 2024<span class="mdui-ripple sidebar_archives-count">11</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2024/01/">一月 2024<span class="mdui-ripple sidebar_archives-count">9</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2023/12/">十二月 2023<span class="mdui-ripple sidebar_archives-count">10</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2023/11/">十一月 2023<span class="mdui-ripple sidebar_archives-count">8</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2023/10/">十月 2023<span class="mdui-ripple sidebar_archives-count">8</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2023/09/">九月 2023<span class="mdui-ripple sidebar_archives-count">3</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2023/08/">八月 2023<span class="mdui-ripple sidebar_archives-count">6</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2023/06/">六月 2023<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2023/05/">五月 2023<span class="mdui-ripple sidebar_archives-count">4</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2023/04/">四月 2023<span class="mdui-ripple sidebar_archives-count">2</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2023/03/">三月 2023<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2023/02/">二月 2023<span class="mdui-ripple sidebar_archives-count">2</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2022/09/">九月 2022<span class="mdui-ripple sidebar_archives-count">7</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2022/08/">八月 2022<span class="mdui-ripple sidebar_archives-count">4</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2017/04/">四月 2017<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2017/03/">三月 2017<span class="mdui-ripple sidebar_archives-count">2</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2017/02/">二月 2017<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2017/01/">一月 2017<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2016/12/">十二月 2016<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2016/11/">十一月 2016<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2016/10/">十月 2016<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/archives/2016/08/">八月 2016<span class="mdui-ripple sidebar_archives-count">1</span></a>
        
      </div>
    </div>
    <div class="mdui-collapse-item">
      <script>var a=localStorage.getItem("mdui-collapse-item-1");if(a){document.getElementsByClassName("mdui-collapse-item")[1].className+=" mdui-collapse-item-open"};</script>
      <div class="mdui-collapse-item-header mdui-list-item mdui-ripple">
        <i class="mdui-list-item-icon mdui-icon material-icons mdui-text-color-green">class</i>
        <div class="mdui-list-item-content">分类</div>
        <i class="mdui-collapse-item-arrow mdui-icon material-icons">keyboard_arrow_down</i>
      </div>
      <div class="mdui-collapse-item-body mdui-list mdui-list-dense">
        
        <a class="mdui-ripple sidebar_archives-link" href="/categories/%E6%8A%80%E6%9C%AF/">技术<span class="mdui-ripple sidebar_archives-count">98</span></a><a class="mdui-ripple sidebar_archives-link" href="/categories/%E7%94%9F%E6%B4%BB/">生活<span class="mdui-ripple sidebar_archives-count">3</span></a><a class="mdui-ripple sidebar_archives-link" href="/categories/%E8%B5%84%E8%AE%AF/">资讯<span class="mdui-ripple sidebar_archives-count">4</span></a><a class="mdui-ripple sidebar_archives-link" href="/categories/%E9%80%9A%E7%9F%A5/">通知<span class="mdui-ripple sidebar_archives-count">4</span></a>
        
      </div>
    </div>
    <div class="mdui-collapse-item">
      <script>var a=localStorage.getItem("mdui-collapse-item-2");if(a){document.getElementsByClassName("mdui-collapse-item")[2].className+=" mdui-collapse-item-open"};</script>
      <div class="mdui-collapse-item-header mdui-list-item mdui-ripple">
        <i class="mdui-list-item-icon mdui-icon material-icons mdui-text-color-brown">bookmark</i>
        <div class="mdui-list-item-content">标签</div>
        <i class="mdui-collapse-item-arrow mdui-icon material-icons">keyboard_arrow_down</i>
      </div>
      <div class="mdui-collapse-item-body mdui-list mdui-list-dense">
        
        <a class="mdui-ripple sidebar_archives-link" href="/tags/ANR/" rel="tag">ANR<span class="mdui-ripple sidebar_archives-count">2</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/APP/" rel="tag">APP<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Android/" rel="tag">Android<span class="mdui-ripple sidebar_archives-count">89</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Android12/" rel="tag">Android12<span class="mdui-ripple sidebar_archives-count">3</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Android13/" rel="tag">Android13<span class="mdui-ripple sidebar_archives-count">2</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Android14/" rel="tag">Android14<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/AndroidStudio/" rel="tag">AndroidStudio<span class="mdui-ripple sidebar_archives-count">3</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/AutoDraw/" rel="tag">AutoDraw<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Crash/" rel="tag">Crash<span class="mdui-ripple sidebar_archives-count">2</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Foxmail/" rel="tag">Foxmail<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Framework/" rel="tag">Framework<span class="mdui-ripple sidebar_archives-count">20</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/GPS%E8%BD%A8%E8%BF%B9%E5%9B%BE/" rel="tag">GPS轨迹图<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Git/" rel="tag">Git<span class="mdui-ripple sidebar_archives-count">2</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/GitHub/" rel="tag">GitHub<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Google/" rel="tag">Google<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Hexo/" rel="tag">Hexo<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Java/" rel="tag">Java<span class="mdui-ripple sidebar_archives-count">3</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Kernel/" rel="tag">Kernel<span class="mdui-ripple sidebar_archives-count">4</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Launcher/" rel="tag">Launcher<span class="mdui-ripple sidebar_archives-count">17</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Lib/" rel="tag">Lib<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Linux/" rel="tag">Linux<span class="mdui-ripple sidebar_archives-count">18</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Markdown/" rel="tag">Markdown<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Material-Design/" rel="tag">Material Design<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/OS-X/" rel="tag">OS X<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/OTA/" rel="tag">OTA<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/QuickTime/" rel="tag">QuickTime<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/SSH/" rel="tag">SSH<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Settings/" rel="tag">Settings<span class="mdui-ripple sidebar_archives-count">6</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/SystemUI/" rel="tag">SystemUI<span class="mdui-ripple sidebar_archives-count">19</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Ubuntu/" rel="tag">Ubuntu<span class="mdui-ripple sidebar_archives-count">7</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/WPS/" rel="tag">WPS<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Wifi/" rel="tag">Wifi<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/WindTerm/" rel="tag">WindTerm<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/Windows/" rel="tag">Windows<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/androidmk/" rel="tag">androidmk<span class="mdui-ripple sidebar_archives-count">2</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/blog/" rel="tag">blog<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/build/" rel="tag">build<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/feel/" rel="tag">feel<span class="mdui-ripple sidebar_archives-count">2</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/framework/" rel="tag">framework<span class="mdui-ripple sidebar_archives-count">50</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/git/" rel="tag">git<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/inotify/" rel="tag">inotify<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/life/" rel="tag">life<span class="mdui-ripple sidebar_archives-count">2</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/ninja/" rel="tag">ninja<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/rsync/" rel="tag">rsync<span class="mdui-ripple sidebar_archives-count">2</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/standard/" rel="tag">standard<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/test/" rel="tag">test<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1/" rel="tag">企业微信<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/" rel="tag">操作系统<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/%E6%B5%8B%E8%AF%95/" rel="tag">测试<span class="mdui-ripple sidebar_archives-count">1</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/%E6%BA%90%E7%A0%81/" rel="tag">源码<span class="mdui-ripple sidebar_archives-count">3</span></a><a class="mdui-ripple sidebar_archives-link" href="/tags/%E7%94%9F%E6%B4%BB%E6%84%9F%E6%82%9F/" rel="tag">生活感悟<span class="mdui-ripple sidebar_archives-count">1</span></a>
        
      </div>
    </div>
    <a href="/about" class="mdui-list-item mdui-ripple">
      <i class="mdui-list-item-icon mdui-icon material-icons mdui-text-color-purple">person</i>
      <div class="mdui-list-item-content">关于</div>
    </a>
  </div>

  <div class="mdui-divider"></div>

  <div class="mdui-list" mdui-collapse="{accordion: true}">
    
      <a href="/timeline" class="mdui-list-item mdui-ripple">时间轴</a>
    
    <div class="mdui-collapse-item">
      <script>var a=localStorage.getItem("mdui-collapse-item-3");if(a){document.getElementsByClassName("mdui-collapse-item")[3].className+=" mdui-collapse-item-open"};</script>
      <div class="mdui-collapse-item-header mdui-list-item mdui-ripple">
        <div class="mdui-list-item-content">友情链接</div>
        <i class="mdui-list-item-icon mdui-icon material-icons">link</i>
      </div>
      <div class="mdui-collapse-item-body mdui-list mdui-list-dense">
        
          <a href="http://www.niemingzhao.top" target="_blank" class="mdui-list-item mdui-p-l-2 mdui-text-color-theme-accent mdui-ripple" style="justify-content: center;">聂明照的博客</a>
        
        
      </div>
    </div>
  </div>
</aside>

  <main id="main" class="mdui-m-t-5 fadeIn animated">
  
<link rel="stylesheet" href="//cdn.bootcdn.net/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css">

  <style>#main article .mdui-card-content .center-block{display:block!important;margin-right:auto!important;margin-left:auto!important}</style>
  <style>#main article .mdui-card-content .text-center{text-align:center!important}</style>
  <article class="mdui-card mdui-m-b-5">
    <header class="mdui-card-media">
      <img src="/images/random/material-9.png" style="max-height: 240px;">
      <div class="mdui-card-media-covered">
        <div class="mdui-card-primary">
          <div class="mdui-card-primary-title">喜欢 Android 14 的 14 个理由</div>
          <div class="mdui-card-primary-subtitle"><i class="iconfont">&#xe697;</i> 2023-11-11 / <i class="iconfont">&#xe601;</i> 龙之叶 &nbsp;&nbsp; <span id="busuanzi_container_page_pv" style="display: none;"><i class="iconfont">&#xe7fd;</i> <span id="busuanzi_value_page_pv"></span></span></div>
        </div>
      </div>
      <div class="mdui-card-menu">
        
          <button class="mdui-btn mdui-btn-icon mdui-text-color-white" mdui-menu="{target: '#qrcode', align: 'right'}"><i class="mdui-icon material-icons">devices</i></button>
          <ul class="mdui-menu" id="qrcode">
            
              <li class="mdui-menu-item"><a class="mdui-text-center mdui-ripple">发送到手机</a></li>
            
            <li class="mdui-menu-item" disabled>
              
                <img src="//qr.liantu.com/api.php?w=246&m=10&text=http://longzhiye.top/2023/11/11/2023-11-11/">
              
            </li>
          </ul>
        
        
          <button class="mdui-btn mdui-btn-icon mdui-text-color-white" mdui-menu="{target: '#share_menu', align: 'right'}"><i class="mdui-icon material-icons">share</i></button>
          <ul class="mdui-menu" id="share_menu">
            <li class="mdui-menu-item">
              <a href="https://service.weibo.com/share/share.php?appkey=&title=喜欢 Android 14 的 14 个理由&url=http://longzhiye.top/2023/11/11/2023-11-11/&pic=http://longzhiye.top/images/favicon.png&searchPic=false&style=simple" target="_blank" class="mdui-ripple">分享到 Weibo</a>
            </li>
            <li class="mdui-menu-item">
              <a href="https://twitter.com/intent/tweet?text=喜欢 Android 14 的 14 个理由&url=http://longzhiye.top/2023/11/11/2023-11-11/&via=龙之叶" target="_blank" class="mdui-ripple">分享到 Twitter</a>
            </li>
            <li class="mdui-menu-item">
              <a href="https://www.facebook.com/sharer/sharer.php?u=http://longzhiye.top/2023/11/11/2023-11-11/" target="_blank" class="mdui-ripple">分享到 Facebook</a>
            </li>
            <li class="mdui-menu-item">
              <a href="https://plus.google.com/share?url=http://longzhiye.top/2023/11/11/2023-11-11/" target="_blank" class="mdui-ripple">分享到 Google+</a>
            </li>
            <li class="mdui-menu-item">
              <a href="https://www.linkedin.com/shareArticle?mini=true&url=http://longzhiye.top/2023/11/11/2023-11-11/&title=喜欢 Android 14 的 14 个理由" target="_blank" class="mdui-ripple">分享到 LinkedIn</a>
            </li>
            <li class="mdui-menu-item">
              <a href="https://connect.qq.com/widget/shareqq/index.html?site=龙之叶的博客&title=喜欢 Android 14 的 14 个理由&pics=http://longzhiye.top/images/favicon.png&url=http://longzhiye.top/2023/11/11/2023-11-11/" target="_blank" class="mdui-ripple">分享到 QQ</a>
            </li>
            <li class="mdui-menu-item">
              <a href="https://telegram.me/share/url?url=http://longzhiye.top/2023/11/11/2023-11-11/&text=喜欢 Android 14 的 14 个理由" target="_blank" class="mdui-ripple">分享到 Telegram</a>
            </li>
          </ul>
        
      </div>
    </header>
    <div class="mdui-card-content mdui-typo">
      <p>和去年 8 月中旬发布的 Android 13 正式版不同，今年的 Android 14 正式版延后到了 10 月 4 日——也就是 Pixel 8 系列发布的同一天。原因我们似乎也能从 Google 宣传新特性中略窥一二：</p>
<p>除了明确表示会率先向特定 Pixel 机型推送的 AI 壁纸生成，因为 OEM 厂商一般都会在系统界面、配色方案上搞「二创」，所以 Android 14 官方页面所宣传的锁屏时钟样式、黑白风格主题等特性，最后也极有可能只有 Pixel 用户才能体验到。</p>
<p><img src="/images/20231111/20231111001.jpg" alt="Android 14 的 14 个新特性 | 图：Google"></p>
<p>那 Android 14 能为非 Pixel 机型的用户带来什么？参考 Google 的官方<a target="_blank" rel="noopener" href="https://www.youtube.com/watch?v=wEVaHobjbPw">介绍视频</a>，我们也从相关文档中整理了一份 Android 14 值得更新的 14 项新特性供你参考。</p>
<h3 id="1-更强大的照片格式"><a href="#1-更强大的照片格式" class="headerlink" title="1.更强大的照片格式"></a>1.更强大的照片格式</h3><blockquote>
<p>超强 HDR 图像格式！</p>
</blockquote>
<p>从 MIUI 相册的 HDR 显示到 OPPO 新近机型的 ProXDR，Android 在 HDR 照片显示这件事情上今年又上演了一次「厂商倒逼 Google」的戏码。在 Android 14 中，Google 终于为我们带来了对 10bit HDR 图像的原生支持，并且还一并推出了新的 Ultra HDR 图像格式。</p>
<p>根据 Google 的介绍，Ultra HDR 图像格式在保存时会保留来自传感器的更多信息，并在查看时展示更鲜艳的色彩、更高的动态范围和更强烈的对比度，简单来说就是小部分国产厂商近几年在卷的那种 HDR 照片显示效果。值得一提的是 Ultra HDR 格式可以完全向后兼容 JPEG 图像格式，它不仅能在 Google 相册等支持 HDR UI 的应用中被正确解码，在未适配 HDR 或不支持 HDR 显示的设备上，Ultra HDR 格式图像也能回落至标准动态范围（SDR）来正常显示。</p>
<p><img src="/images/20231111/20231111002.png" alt="演示效果，仅供参考 | 图：Google"></p>
<p>针对 Pixel 系列机型的 HDR 照片支持目前也是蓄势待发，刚发布不久的 Pixel 8 系列的相机应用已经内置了拍摄选项，开启该选项后所拍摄的 Ultra HDR 格式照片能够在 Google 相册中以 HDR 效果进行查看，同时 Lightroom 移动版也在最新的 9.0 版本针对 Pixel 7 系列和 Android 14 带来了 HDR 编辑与导出支持。</p>
<p><img src="/images/20231111/20231111003.png" alt="Pixel 新版相机应用中的 Ultra HDR 拍摄选项以及相册中的 Ultra HDR 标识"></p>
<p>总体而言 HDR 照片对大家来说依然是一个陌生的新生态，比如尽管我很想放上几张对比图给大家看看效果——咱们的编辑器和网页都不允许。</p>
<p>另外 Android 14 也为 Camera2 和 CameraX 等相机扩展组件带来了更新，允许第三方应用支持更长的照片处理时间、调用系统相机的算法密集型拍照功能（如暗光拍摄能力）等，这类面向开发者（并且不会有多少国内应用适配）的细节这里就不展开了。</p>
<h3 id="2-更规范的照片选取"><a href="#2-更规范的照片选取" class="headerlink" title="2.更规范的照片选取"></a>2.更规范的照片选取</h3><blockquote>
<p>好吧，至少从某种程度上来说是这样的。</p>
</blockquote>
<p>从某种程度上来说，Google 正在强制推行自 Android 13 引入的照片选择器。对用户而言这当然是需要重点关注的头等好事。</p>
<p>简单来说，和此前需要开发者适配、需要 Google Play 服务更新支持的做法不同，A<strong>ndroid 14 直接引入了一个让用户为 app 选择可见媒体文件的「中间层」，这个「中间层」用的正是照片选择器同样的设计</strong>：一个从底部弹出的照片和视频选择面板，内含支持多选和长按预览的「照片」（其实也可以选择视频）和可以按照路径位置查找媒体文件的「影集」两个页面。</p>
<p><img src="/images/20231111/20231111004.png" alt="通过照片选择器选择应用可访问的照片和视频"></p>
<p>在 Android 13 引入照片选择器这一设计后，Android 14 又新增了类似 iOS 那样的媒体文件范围选取机制，这套机制在 Android 14 中对应的权限是 <strong>READ_MEDIA_VISUAL_USER_SELECTED</strong>。</p>
<p><strong>这个权限和以往大部分新系统、新权限最大的不同点，在于它是由系统自动附加的</strong>。只要应用请求 <a target="_blank" rel="noopener" href="https://developer.android.com/reference/android/Manifest.permission#READ_MEDIA_IMAGES">READ_MEDIA_IMAGES</a>、<a target="_blank" rel="noopener" href="https://developer.android.com/reference/android/Manifest.permission#READ_MEDIA_VIDEO">READ_MEDIA_VIDEO</a> 或 <a target="_blank" rel="noopener" href="https://developer.android.com/reference/android/Manifest.permission#ACCESS_MEDIA_LOCATION">ACCESS_MEDIA_LOCATION</a> 三类权限的任意一种，无论应用是否面向 Android 14 进行适配，<a target="_blank" rel="noopener" href="https://developer.android.com/reference/android/Manifest.permission#READ_MEDIA_VISUAL_USER_SELECTED">READ_MEDIA_VISUAL_USER_SELECTED</a> 这一权限都会被自动添加到应用的声明清单中。</p>
<p>从我们的实际体验来看，市面上主流的、已经适配了 Android 13 媒体权限（即将<strong>音乐和音频、照片和视频</strong>两类权限分开授予）的应用，在 Android 14 中访问照片和视频权限时的确都会先调起 Google 的照片选择器——先让用户选择应用可以访问的内容，然后应用内置的媒体选择器才能将已授权的内容展示出来。并且这种授予也是临时的，一旦应用被放进后台或进程被用户结束，下次启动时相关的授予流程就还会再出现一次。</p>
<p><img src="/images/20231111/20231111005.png" alt="Android 14 的照片范围选择权限处理流程"></p>
<p>如此一来这套新权限的局限性（虽然是暂时的）也很明显了：依然有少部分应用获得了调用照片选择器的豁免权，最具代表性的比如目标 API 级别为 32、依然面向 Android 12 进行适配的「小而美」。</p>
<p>我知道你想说什么但先别急，我们在上面也提到「强制」和「暂时」，是因为根据 Google Play 商店的<a target="_blank" rel="noopener" href="https://support.google.com/googleplay/android-developer/answer/11926878?hl=zh-Hans">目标 API 级别要求</a>，2023 年 8 月 31 日起所有提交至商店的应用更新都必须面向 Android 13 进行适配，虽然 Google 允许开发者申请延期至 11 月 1 日，但微信在 Play 商店的最后一次更新恰好是 8 月 24 日……张小龙会如何应对我们拭目以待。</p>
<p><img src="/images/20231111/20231111021.png" alt="Google Play 商店的目标 API 级别要求"></p>
<p>当然了，Google 也还是希望开发者都用标准化的照片管理器实现，毕竟视觉风格上与系统更搭。适配过的应用即便依然选择使用自己的媒体选择器实现方式，它们在 Android 14 中也能借助界面和操作提示引导用户重新选取更多媒体文件。</p>
<p><img src="/images/20231111/20231111006.png" alt="已适配 Android 14 部分的应用可引导用户选择更多媒体文件"></p>
<h3 id="3-更省电的缓存机制"><a href="#3-更省电的缓存机制" class="headerlink" title="3.更省电的缓存机制"></a>3.更省电的缓存机制</h3><blockquote>
<p>每次更新之后他们都这么说，这次是不是真的？</p>
</blockquote>
<p>尽管我一直坚持是因为天气转凉，升级到 Android 14 之后，的确有不少手持 Google Tensor 处理器设备的朋友向我表示手机更凉爽、续航也更长了。</p>
<p>那暂且将功劳归于 Android 14 开始生效的缓存应用冻结机制吧。</p>
<p>缓存，即将前台运行的应用放进内存，和直接杀掉进程不同，缓存的应用调用起来更快、重新开启所需要消耗的资源相比冷启动也更少。所以将暂时不用的应用放进缓存是一种非常合理的做法，Google 将「暂停执行已缓存的应用」放进 Android 系统的「开发者选项」后，这个功能也一直以「Android 的墓碑后台机制」的身份备受玩机群体的推崇。</p>
<p><img src="/images/20231111/20231111007.png" alt="暂停执行已缓存的应用设置"></p>
<p>根据 Google 公开的数据，被暂停执行的已缓存应用在 Android 14 测试版中消耗的 CPU 周期要比 Android 13 正式版少 50%，因此在 Android 14 中这一机制得到「转正」，以往缓存的应用可以基本不受限制地运行，但在 Android 14 上这些应用在进入缓存后很短的时间内就会被系统冻结，直接杜绝其 CPU 资源调用。</p>
<p>不知道是不是已经知道了此前「暂停执行已缓存应用」机制的问题，这次 Google 也特别提到冻结仅适用于常规的 Android 应用生命周期 API（如前台服务、JobScheduler 或 WorkManager）之外的后台工作。</p>
<p>另外值得一提的是，随着缓存机制的优化，Android 14 也打破了平台缓存应用数量的长期限制，减少了冷启动应用的情况，而且设备 RAM 越大改善就越明显：在 8GB 内存的设备上冷启动应用速度提高了 20%，在 12GB 内存的设备上则提高了 30%。</p>
<h3 id="4-更无感的登录体验"><a href="#4-更无感的登录体验" class="headerlink" title="4.更无感的登录体验"></a>4.更无感的登录体验</h3><p>和刚发布不久的 Windows 11 Moment 4 更新一样，Android 14 也是首个系统级支持通行密钥（Passkey）的版本。Android 14 在平台 API 中引入了凭据管理器（Credential Manager），并且通过 Jetpack 开发库和 Google Play 服务，让该功能可以一直向下支持到 Android 4.4（API 级别 19）的老设备。</p>
<p><img src="/images/20231111/20231111008.png" alt="使用通行密钥登录的流程演示 | 图：Google"></p>
<p>凭据管理器用于简化用户认证流程，并且主要通过通行密钥（Passkey）来提高安全性。</p>
<p>目前我们在 Android 14 的密码和帐号设置中可以看到通行密钥认证服务的相关设置，换句话说除了可以将手机上的生物识别信息作为通行密钥认证方式，Android 14 也支持添加第三方应用作为通行密钥管理应用。</p>
<p><img src="/images/20231111/20231111009.png" alt="Android 14 中的通行密钥管理服务设置"></p>
<p>不过虽然 1Password 早前宣布过对 Android 14 通行密钥管理的功能支持，但在最新的 Beta 测试版本中我们还无法成功调用 1Password 来创建通行密钥。</p>
<h3 id="5-更好看的返回动画"><a href="#5-更好看的返回动画" class="headerlink" title="5.更好看的返回动画"></a>5.更好看的返回动画</h3><blockquote>
<p>但「预见式返回动画」竟然还在「开发者选项」里。</p>
</blockquote>
<p>Google 提出的一个、有关 Android 系统返回的问题，即我们很多时候都不太确定返回操作会将自己带向何方。</p>
<p>为此 Android 13 提出了「预见式返回动画」这个解决方案，即通过一个类似「半确定」状态的动画预览，告知我们接下来会被带到哪里去——如果目的地非你所愿，那可能你就得取消返回操作、在当前界面中找找其他导航按键了（比如「向上」）。</p>
<p>两年过去了，这个特性准备得怎么样了？<strong>坏消息是它依然放在「开发者选项」里，好消息是它的确更完善了</strong>。</p>
<p><img src="/images/20231111/20231111010.gif" alt="预见式返回动画效果"></p>
<p>除了给返回箭头添加一个圆圆的、形状可变、颜色为 Material You 动态取色得背景之外，Android 14 正式版当中默认的预见式返回动画效果更自然、表现也更加稳定。同时 Google 也在 Android 14 中支持了自定义预见式返回手势动画的能力，允许开发者为应用中不同组件和不同界面的跳转加上更加赏心悦目的动画，官方 Material Design 组件库中也提供的底部菜单、侧栏菜单和搜索三种组件的返回动画供开发者参考、适配。</p>
<p><img src="/images/20231111/20231111011.gif" alt="底部菜单（Bottom Sheet）的预见式返回动画"></p>
<h3 id="6-更好的多语言支持"><a href="#6-更好的多语言支持" class="headerlink" title="6.更好的多语言支持"></a>6.更好的多语言支持</h3><blockquote>
<p>简体中文除外。</p>
</blockquote>
<p>和 MIUI 这类完全不管多语言支持的做法不同，Google 在原生 Android 的多语言支持上走的是另一个极端：完全不管除了简体中文以外的多语言支持——比起在 AOSP 提交中否决支持文字体可变字重支持的冷酷，今年 Android 14 引入的多语言支持可谓相当温暖：</p>
<p>比如针对特定语言中的语法性别现象的词形变化 API，用 Google 所举的例子来说，比如当我们的应用界面中需要显示「你已订阅……」这句提示语时，中文和英文状态下都是无需注意语法性别的，但如果是法语，这句话则可能对应三种情况：</p>
<ul>
<li>Vous êtes abonné à…</li>
<li>Vous êtes abonnée à…</li>
<li>Abonnement à…activé</li>
</ul>
<p>词形变化 API 就是用来简化并解决这类问题的。根据 Google 的描述，这个 API 能够帮助开发者根据使用者的性别展示对应的语法性别文本，降低这类需求带来的开发成本，避免应用在采用特定语言显示时因为忽略语法性别而冒犯用户。</p>
<p>再比如区域偏好设置。我们或多或少都在天气应用、测量工具、量化 app 中接触过与地区偏好相关的设定，从温度、距离、长度采用哪种单位、日期显示采用年月日还是日月年到每周的第一天究竟是周日还是周一……以往这类设置往往都散落在不同应用的设置当中，Android 14 则在「系统 &gt; 语言和输入法」中新增了一项面为「区域偏好设置」的独立页面，一方面方便用户提前选好自己想要的温度单位、每周起始日以及数字呈现方式，另一方面也配套为开发者提供了对应 API 和 Intent 来读取这些偏好设置，然后直接套用到应用当中。</p>
<p><img src="/images/20231111/20231111012.png" alt="Android 14 中的地区偏好设置"></p>
<p>根据 Google 给出的信息，这些偏好设置也能够在设备数据备份、还原的过程中在不同设备间迁移。</p>
<p>最后，针对 Android 13 引入的应用语言偏好设定，Android 14 也向输入法开放了应用语言的获取接口，让输入法能够根据不同应用的不同语言设定，自动弹出对应的输入键盘。</p>
<h3 id="7-更聪明的分享菜单"><a href="#7-更聪明的分享菜单" class="headerlink" title="7.更聪明的分享菜单"></a>7.更聪明的分享菜单</h3><blockquote>
<p>造轮子造出的新思路。</p>
</blockquote>
<p>当你在 Chrome 浏览器中点击「分享」按钮时，首先弹出的菜单是 Chrome 自行定制的分享菜单，这个分享菜单下方提供了包括屏幕截图、网页长截图、URL 链接复制等功能在内的六个分享操作——和 Android 系统的原生分享菜单（上图中点击「展开」后即是）不同，Chrome 在定制分享菜单中所提供的这些操作选项与我们的网页分享行为关联更加密切，或者说往往也是我们在浏览网页时主要考虑的一些操作。</p>
<p><img src="/images/20231111/20231111013.png" alt="Chrome 浏览器的定制分享菜单"></p>
<p>作为规则制定者的 Google 在自家 Chrome、Google 相册中都采用「自己造轮子」的方式设计一个独立的分享菜单，正好也能说明 Android 系统原生分享菜单存在一个大问题：太公平了。无论分享的内容是什么，Android 系统都会在长长的分享菜单中将提供分享操作的应用按照名称排序，找起来不方便、有的分享操作和实际分享内容的关联性也比较差。</p>
<p>因此在 Android 14 中，Google 基于 Chrome 和 Google 相册的分享菜单设计思路，向应用开放了分享菜单自定义操作定制功能，允许开发者针对特定文件类型声明分享自定义操作，当用户呼出分享菜单时，这些操作选项会出现在分享列表顶部和分享内容预览之间，方便用户快速调用可能需要的应用执行下一步动作；同时 Google 也希望通过调整 Direct Share 目标排序的方式来优化 Android 分享菜单的可用性。</p>
<p><img src="/images/20231111/20231111014.png" alt="自定义分享操作按钮示意图"></p>
<p>除了上述改动，Google 在 Android 14 中还将分享菜单做成了可独立更新的 Project Mainline 模块方便功能迭代，并且允许用户通过分享预览即时调整、编辑分享内容。</p>
<h3 id="8-更友好的缩放体验"><a href="#8-更友好的缩放体验" class="headerlink" title="8.更友好的缩放体验"></a>8.更友好的缩放体验</h3><blockquote>
<p>可惜来得有点晚，国内适老化的字体改造已经乱七八糟了。</p>
</blockquote>
<p>在 Android 14 中，Google 还带来了最高 200% 的非线性字体缩放功能。和此前版本的机械缩放不同，采用非线性放大曲线的好处在于，界面中原本已经足够大的文本不会随着全局设定而同步缩放，文本之间的大小关系、层级结构都能得到有效保留，较大的字体更不会因为缩放而出现文本截断、难以阅读等问题。</p>
<p><img src="/images/20231111/20231111015.png" alt="正常大小、线性 200% 缩放与非线性 200% 缩放，非线性缩放能在保证所有文本具备可读性的同时避免原本就已经很大的字体被机械放大"></p>
<p>在后续的版本中，Google 还在系统的快速设置面板中添加了一个专门用于字体缩放的开关，有这方面需求的朋友可以借助这个开关随时调整阅读体验。</p>
<p><img src="/images/20231111/20231111016.png" alt="正式版新增的字体大小快速设置开关"></p>
<h3 id="9-更透明的权限调用"><a href="#9-更透明的权限调用" class="headerlink" title="9.更透明的权限调用"></a>9.更透明的权限调用</h3><blockquote>
<p>收紧关键权限、方便用户管理是永恒的主题。</p>
</blockquote>
<p>很多人不知道的是，很多依赖定时执行任务或发出提醒的应用（比如 Tasker 也用）都会用到的闹钟——你看不见也听不到的那种。根据应用内设置的不同，这些闹钟会在既定的时间拉起应用，帮助应用准时完善用户设置好的任务。</p>
<p>不过问题在于，通过精确闹钟唤醒应用是一种资源消耗极强、Google 也非常不推荐的定时任务规划手段（根据 Google 的开发者文档它可以随时将设备从 Doze 状态中唤醒），此前引入的 <strong>闹钟和提醒</strong> 权限不再默认授予。这项限制适用于新安装的、面向 Android 13 及以上系统适配的应用。</p>
<p><img src="/images/20231111/20231111017.png" alt="闹钟和提醒权限授予提示与授予界面"></p>
<p>与之类似的，Android 14 开始 Google 也会通过 Play 商店策略对非通话、闹钟类型的应用移除针对 <a target="_blank" rel="noopener" href="https://developer.android.com/reference/android/Manifest.permission#USE_FULL_SCREEN_INTENT">USE_FULL_SCREEN_INTENT</a> 这一权限的默认授权——在此前的版本中，应用可以借助这一权限在锁屏状态下弹出全屏通知，而 2023 年年底这一政策生效之后，开发者就需要通过适配专门的<a target="_blank" rel="noopener" href="https://developer.android.com/reference/android/provider/Settings#ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT">新 API</a> 来向用户发起授权申请了。</p>
<p>Google 也在提高用户敏感数据使用情况在 Android 14 中的可见性。除了将部分数据安全相关的信息直接放进对应的权限授予弹窗外，Android 14 还会在特定情况下向用户发出通知提醒，包括：</p>
<ul>
<li>应用开始向第三方共享位置信息</li>
<li>应用开始将位置信息用于广告目的</li>
</ul>
<p><img src="/images/20231111/20231111018.png" alt="位置信息授权时提供的数据安全提示与 Play 商店中的数据安全提示"></p>
<p>尽管目前大部分与敏感信息使用透明化相关的改动都围绕位置信息，此前 Google 在 I/O 大会上也透露过后续会将范围向其他个人信息扩展的计划。</p>
<h3 id="10-更尴尬的截图提示"><a href="#10-更尴尬的截图提示" class="headerlink" title="10.更尴尬的截图提示"></a>10.更尴尬的截图提示</h3><blockquote>
<p>你截屏了！系统知道、对方可能也会知道。</p>
</blockquote>
<p>当你在即时消息里向朋友诉苦、当老板在公司群里激情发言，应用里突然弹出通知提示说「对方刚刚进行了截屏操作」……类似的功能在 Android 14 中接下来就有 API 支持了。</p>
<p>借助 <a target="_blank" rel="noopener" href="https://developer.android.google.cn/reference/android/Manifest.permission#DETECT_SCREEN_CAPTURE">DETECT_SCREEN_CAPTURE</a> 这一 API，应用在 Android 14 中可以获知与按键操作相关的截图事件（一般是电源键+音量减）了——然后应用开发者可以向用户发出提示，比如付款应用提醒用户不要随便截图分享收款码，或者将这个事件传递给其他人（官方文档中似乎并没有限制开发者这么操作），告诉对方你刚刚进行了截图。</p>
<p><img src="/images/20231111/20231111019.png" alt="Google 给出的截图操作提示使用场景"></p>
<p>然后呢？然后就看谁比较尴尬吧。不过大家也不用担心，一方面这个 API 只会检测基于按键操作的截图事件，ADB、录屏应用等应该不受影响——另一方面这种 Android 新版本特性，至少你每天都要用的微信是不会跟进的。</p>
<h3 id="11-更灵活的常驻通知"><a href="#11-更灵活的常驻通知" class="headerlink" title="11.更灵活的常驻通知"></a>11.更灵活的常驻通知</h3><blockquote>
<p>那么「常驻」的意义是……？</p>
</blockquote>
<p>一个相比其他改动而言不怎么起眼，但真正用的时候能让人楞上几秒的小改动：在 Android 14 中，常驻通知可以被用户手动划走消除了。</p>
<p><img src="/images/20231111/20231111020.gif" alt="新的常驻通知清除机制"></p>
<p>Google 也为常驻通知消除机制设定了一套比较基础的规则：</p>
<ul>
<li>当我们点击通知面板中的「清除全部」按钮时，常驻通知不受影响</li>
<li>当手机屏幕锁定时，常驻通知不可被消除</li>
<li><a target="_blank" rel="noopener" href="https://developer.android.com/reference/androidx/core/app/NotificationCompat.CallStyle">CallStyle</a> 类别（通常与通话相关）的常驻通知不可被消除</li>
<li>使用通知面板中的「清除全部」选项时，常驻通知不会被消除</li>
</ul>
<h3 id="12-更现代的无损音频"><a href="#12-更现代的无损音频" class="headerlink" title="12.更现代的无损音频"></a>12.更现代的无损音频</h3><blockquote>
<p>给 USB-C 有线耳机用户一点爱。</p>
</blockquote>
<p>干掉 3.5mm 接口之后，近几年真无线蓝牙耳机井喷式发展，各种传输协议也是日新月异。好在 Android 14 这次也关照到了那些坚持使用 USB-C 接口有线听歌的音乐发烧友。</p>
<p>Android 14 向开发者开放了 USB 设备首选混音器属性的能力，允许开发者注册侦听器以获取首选混音器属性的更改，并使用新的 <a target="_blank" rel="noopener" href="https://developer.android.google.cn/reference/android/media/AudioMixerAttributes">AudioMixerAttributes</a> 类配置混音器属性。AudioMixerAttributes 类支持在无混音、音量调整或后处理效果的前提下直接传输音频，进而带来无损的有线听歌体验。</p>
<h3 id="13-更通用的健康数据"><a href="#13-更通用的健康数据" class="headerlink" title="13.更通用的健康数据"></a>13.更通用的健康数据</h3><blockquote>
<p>继健康数据与平台解绑之后，Health Connect 自身进一步与 Google Play 商店解绑。好事。</p>
</blockquote>
<p>2022 年 5 月，今年 5 月，Google 在 Android 开发者官方博客中隆重推出了一个名为 Health Connect 的新平台并推出了相应的 API。Health Connect 官方网站用非常显眼的大标题和副标题简洁地描述了其核心功能与优势：简化健康类应用之间的连接。</p>
<p>散落在不同应用、服务和可穿戴设备中的健康数据，在 Android 平台上有了一个通用的、可实现数据迁移的中间平台。而从 Android 14 开始，Health Connect 开始从此前需要从 Play 商店下载安装的独立应用升级为系统能力，它将以系统组件的身份通过 Google Play 系统更新接收更新，对不能直接访问 Play 商店但可以借助 OEM 厂商定期更新系统的国内用户而言也是好事一件。</p>
<p>另外，Health Connect 也跟随本次更新新增了包括运动路线在内的更多数据类型。</p>
<h3 id="14-更开放的商店策略"><a href="#14-更开放的商店策略" class="headerlink" title="14.更开放的商店策略"></a>14.更开放的商店策略</h3><blockquote>
<p>感谢欧盟。</p>
</blockquote>
<p>8 月 25 日，欧盟《数字服务法案》正式生效。作为受该法案重点关照的大公司之一，Google 也在第三方应用商店这个反垄断诉讼的「热门话题」上做了不少工作。</p>
<p>在 Android 14 中，Google 引入了多个 <a target="_blank" rel="noopener" href="https://developer.android.com/reference/android/content/pm/PackageInstaller">PackageInstaller</a> API 来保证第三方应用商店的使用体验：</p>
<ul>
<li><a target="_blank" rel="noopener" href="https://developer.android.com/reference/android/content/pm/PackageInstaller.Session#requestUserPreapproval(android.content.pm.PackageInstaller.PreapprovalDetails,%20android.content.IntentSender)">requestUserPreapproval()</a> 允许第三方应用商店提前请求用户的安装批准，并且在用户授权后可以实现后台下载和安装体验</li>
<li><a target="_blank" rel="noopener" href="https://developer.android.com/reference/android/content/pm/PackageInstaller.SessionParams#setRequestUpdateOwnership(boolean)">setRequestUpdateOwnership()</a> 允许第三方应用商店通过所有权声明指定应用自动更新的安装来源，非指定来源的应用升级需要用户手动批准</li>
<li><a target="_blank" rel="noopener" href="https://developer.android.com/reference/android/content/pm/PackageInstaller.InstallConstraints">InstallConstraints</a> API 允许第三方应用商店选择用户并未与 app 交互的时段更新应用</li>
<li><a target="_blank" rel="noopener" href="https://developer.android.com/reference/android/content/pm/PackageInstaller.SessionParams#setDontKillApp(boolean)">setDontKillApp()</a> 允许第三方应用商店针对支持拆分式安装包（APKs）的应用采用无缝更新，比如仅更新用户当前未在使用的组件<br>最后，从 Android 14 开始系统软件包安装程序也允许开发者指定要包含在应用中的 Google Play 应用商店页面的应用元数据，例如数据安全信息等。这同时也能方便第三方应用商店获取与应用相关的元数据信息</li>
</ul>
<p>以上文章转载自少数派文章(<a target="_blank" rel="noopener" href="https://sspai.com/post/83501">https://sspai.com/post/83501</a>)</p>

      
      <blockquote>
        
        <strong>本文链接：</strong><br><a href="http://longzhiye.top/2023/11/11/2023-11-11/">http://longzhiye.top/2023/11/11/2023-11-11/</a>
      </blockquote>
    </div>
    <footer class="mdui-card-actions">
      
        <a class="mdui-ripple article_categories-link" href="/categories/%E6%8A%80%E6%9C%AF/">技术</a>
      
      
        <a class="mdui-ripple article_tags-link" href="/tags/Android/" rel="tag">Android</a><a class="mdui-ripple article_tags-link" href="/tags/Framework/" rel="tag">Framework</a>
      
    </footer>
    
  </article>
  
<script src="//cdn.bootcdn.net/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="//cdn.bootcdn.net/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js"></script>

  <script>$("#main article .mdui-card-content img.fancybox").on("click",function(e){$.fancybox.open({src:$(this).attr("src")});});</script>


  <nav id="paginator">
    
      <a rel="prev" class="extend prev" href="/2023/11/12/2023-11-12/">
        <button aria-label="prev" class="mdui-btn mdui-btn-raised mdui-btn-icon mdui-color-theme-accent mdui-ripple"><i class="mdui-icon material-icons">arrow_back</i></button>
        <span class="mdui-p-x-3" mdui-tooltip="{content: '抛弃 scp 改用 rsync，让 Linux 下文件传输高效无比'}">上一篇</span>
      </a>
    
    <div class="spacer"></div>
    
      <a rel="next" class="extend next" href="/2023/11/05/2023-11-05/">
        <span class="mdui-p-x-3" mdui-tooltip="{content: 'Android 13 Handler详解'}">下一篇</span>
        <button aria-label="next" class="mdui-btn mdui-btn-raised mdui-btn-icon mdui-color-theme-accent mdui-ripple"><i class="mdui-icon material-icons">arrow_forward</i></button>
      </a>
    
  </nav>





</main>
  <footer id="footer" class="mdui-m-t-5 mdui-p-y-3 mdui-color-theme">
  <div class="mdui-p-y-0 mdui-text-center">
    
    
    
    
    
    
    
      <a href="http://github.com/longzhiye" target="_blank" class="mdui-btn mdui-btn-icon mdui-text-color-theme-a100"><i class="mdui-icon iconfont">&#xe7ab;</i></a>
    
    
    
      <a href="https://www.zhihu.com/people/long-zhi-xie-61" target="_blank" class="mdui-btn mdui-btn-icon mdui-text-color-theme-a100"><i class="mdui-icon iconfont">&#xe6c0;</i></a>
    
    
    
      <a href="tencent://tencent:////message/?uin=951898105&Menu=yes" target="_blank" class="mdui-btn mdui-btn-icon mdui-text-color-theme-a100"><i class="mdui-icon iconfont">&#xe651;</i></a>
    
    
  </div>
  <div class="mdui-p-y-1 mdui-text-center">
    Copyright &copy; 2022 - 2025 龙之叶<br>
    Powered by <a href="https://hexo.io/" target="_blank" class="mdui-text-color-theme-accent">Hexo</a>
    <br>
      <span id="busuanzi_container_site_pv" style="display: none;"><i class="iconfont">&#xe7fd;</i> <span id="busuanzi_value_site_pv"></span></span> &nbsp;&nbsp;
      <span id="busuanzi_container_site_uv" style="display: none;"><i class="iconfont">&#xe601;</i> <span id="busuanzi_value_site_uv"></span></span>
    
  </div>
</footer>

  <button id="gotop" class="mdui-fab mdui-fab-fixed mdui-fab-hide mdui-color-theme-accent mdui-ripple"><i class="mdui-icon material-icons">arrow_upward</i></button>
  <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
  
<script src="/js/mdui.js"></script>
<script src="/js/script.js"></script>

  
<script src="/custom.js"></script>

</body>
</html>
